#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <string.h>
char tube[] = "/tmp/print";

void impression(char *nomFic){

  printf("Debut d'impression de \"%s\"...\n", nomFic);
  sleep(5); /* Simule la lenteur de l'impression */
  printf("...Fin d'impression de \"%s\"...\n", nomFic);

}

int main(){
  int fd;
  char file[60]="";
  /* Creation du pipe */
  if (mkfifo(tube, 0666) < 0) {
    perror("Erreur lors de la création du pipe\n");
  }
  /* Ouverture du pipe en écriture */
  fd = open(tube,O_RDWR | O_NDELAY);
  if (fd < 0) {
    perror("Erreur lors de l'ouverture du tube en écriture");
    return EXIT_FAILURE;
  }
  /* Boucle d'attente */
  do {
    /* Vérifier combien de byte est disponible */
    /* Not working 
    if (ioctl(fd, FIONREAD, &bytesAvailable) < 0) {
      perror("erreur lors de la lecture du pipe");
      return EXIT_FAILURE;
    } */
    /* On a quelque chose à lire */
    if (read(fd, &file, 60) < 0) {
      if (errno != EAGAIN) {
        fprintf(stderr,"%i",errno);
        perror("Erreur lecture"); 
        return EXIT_FAILURE;
      }
      if (strlen(file) > 1) {
        impression(file);
        strcpy(file,"");
      }
    }
  } while(1);
  if (unlink(tube) < 0) {
    perror("Erreur lors de la supression du pipe");
    return EXIT_FAILURE;
  }

  return EXIT_SUCCESS;
}
